#!/usr/bin/env python3
# -*- coding:UTF-8 -*-
"""
python的类变量和成员变量
类似于JavaScript方式，类属性和类方法就在prototype上面(当然python没有原型概念，挂在类上面)

see:http://www.binarydance.top/aticle_view.html?aticle_id=495415157879746560&t=1624261166678
"""


class TestClass(object):
    val1 = 'name class'
    val2 = []

    def __init__(self):
        self._name = 'name instance - init'
        self._addr = [8]


if __name__ == '__main__':
    inst = TestClass()
    inst1 = TestClass()

    #使用类上面的变量
    print(TestClass.val1)
    print(inst.val1)
    print(inst1.val1)
    # 使用类上面的变量
    print(TestClass.val2)
    print(inst.val2)
    print(inst1.val2)

    #使用实例变量上面的变量
    print(inst._name)
    print(inst1._name)
    print(inst._addr)
    print(inst1._addr)

    print('=======================')

    #修改类变量
    TestClass.val1 = 'name class v1'
    print(TestClass.val1)
    print(inst.val1)
    print(inst1.val1)
    # 修改类变量
    TestClass.val2.append(1)
    print(TestClass.val2)
    print(inst.val2)
    print(inst1.val2)

    #改变自己实例变量值
    inst._name = 'name instance -init -change'
    print(inst._name)
    print(inst1._name)
    print(inst._addr)
    print(inst1._addr)

    print('=======================')
    #自己类添加一个val1变量并赋值
    inst.val1 = 'name class v2'
    print(TestClass.val1)
    print(inst.val1)
    print(inst1.val1)

    #使用类上面的val2
    inst.val2.append(2)
    print(TestClass.val2)
    print(inst.val2)
    print(inst1.val2)

    #自己类上面的_addr
    inst._addr.append(9)
    print(inst._name)
    print(inst1._name)
    print(inst._addr)
    print(inst1._addr)
